import qs from 'qs'
let cancel ,promiseArr = {}
const CancelToken = axios.CancelToken;
axios.defaults.baseURL = '/api'
axios.defaults.timeout = 10000
//响应拦截器即异常处理
axios.interceptors.response.use(response => {
  return response
}, err => {
    let vm = new Vue()
    if (err && err.response) {
      switch (err.response.status) {
        case 400:
          err.message = '错误请求'
          break;
        case 401:
          err.message = '未授权，请重新登录'
          break;
        case 403:
          err.message = '拒绝访问'
          break;
        case 404:
          err.message = '请求错误,未找到该资源'
          break;
        case 405:
          err.message = '请求方法未允许'
          break;
        case 408:
          err.message = '请求超时'
          break;
        case 500:
          err.message = '服务器端出错'
          break;
        case 501:
          err.message = '网络未实现'
          break;
        case 502:
          err.message = '网络错误'
          break;
        case 503:
          err.message = '服务不可用'
          break;
        case 504:
          err.message = '网络超时'
          break;
        case 505:
          err.message = 'http版本不支持该请求'
          break;
        default:
          err.message = `连接错误${err.response.status}`
      }
    } else {
      err.message = "连接到服务器失败"
    }
    if(err.response.status == 401){
      localStorage.removeItem('ms_username')
      localStorage.removeItem('ms_token')
      setTimeout(() => {
        location.reload()
      }, 2000);
    }
    vm.$message.error(err.message)
    return Promise.resolve(err.response)
})


export default {
  //get请求
    get (url,param,success, type) {
      let data = new URLSearchParams();
      for(let i in param){
        data.append(i,param[i])
      }
      let token = localStorage.getItem('ms_token') || '123123123123123123'
      if(type == 'register'){
        return new Promise((resolve,reject) => {
          axios({
            method: 'get',
            url,
            params: data,
            dataType: "JSON",
            withCredentials: false,
            cancelToken: new CancelToken(c => {
              cancel = c
            })
          }).then(res => {
            resolve(success(res))
          })
        })
      }else{
        return new Promise((resolve,reject) => {
          axios({
            method: 'get',
            url,
            params: data,
            dataType: "JSON",
            headers: {
              // 'institution-auth-token': token
              'institution-auth-token': token
            },
            withCredentials: false,
            cancelToken: new CancelToken(c => {
              cancel = c
            })
          }).then(res => {
            resolve(success(res))
          })
        })
      }      
    },
  //post请求
    post (url,param,success, type) {
      let data = new URLSearchParams();
      for(let i in param){
        data.append(i,param[i])
      }
      let token = localStorage.getItem('ms_token') || '123123123123123123'
      if(type == 'reigster'){
        return new Promise((resolve,reject) => {
          axios({
            method: 'post',
            url,
            data: data,
            dataType: "JSON",
            withCredentials: false,
            cancelToken: new CancelToken(c => {
              cancel = c
            })
          }).then(res => {
            resolve(success(res))
          })
        })
      }else{
        return new Promise((resolve,reject) => {
          axios({
            method: 'post',
            url,
            data: data,
            dataType: "JSON",
            headers: {
              // 'institution-auth-token': token
              'institution-auth-token': token
            },
            withCredentials: false,
            cancelToken: new CancelToken(c => {
              cancel = c
            })
          }).then(res => {
            resolve(success(res))
          })
        })
      }
    },
    // delete
    delete (url, param, success) {
      let token = localStorage.getItem('ms_token') || '123123123123123123'
      let comValue = qs.stringify(param)
      return new Promise((resolve,reject) => {
        axios({
          method: 'delete',
          url,
          dataType: "JSON",
          headers: {
            'institution-auth-token': token
          },
          withCredentials: false,
          cancelToken: new CancelToken(c => {
            cancel = c
          })
        }).then(res => {
          resolve(success(res))
        })
      })
    },
    put (url,param,success) {
      let data = new URLSearchParams();
      for(let i in param){
        data.append(i,param[i])
      }
      let token = localStorage.getItem('ms_token') || '123123123123123123'
      let comValue = qs.stringify(param)
      return new Promise((resolve,reject) => {
        axios({
          method: 'put',
          url,
          data: data,
          dataType: "JSON",
          headers: {
            'institution-auth-token': token
          },
          withCredentials: false,
          cancelToken: new CancelToken(c => {
            cancel = c
          })
        }).then(res => {
          resolve(success(res))
        })
      })
    },
    body(url, param, success){
      let token = localStorage.getItem('ms_token') || '123123123123123123'
      return new Promise((resolve,reject) => {
        axios({
          method: 'post',
          url,
          data: param,
          dataType: "JSON",
          headers: {
            'institution-auth-token': token
          },
          withCredentials: false,
          cancelToken: new CancelToken(c => {
            cancel = c
          })
        }).then(res => {
          resolve(success(res))
        })
      })
    },
  }